package com.slz3.business.module.orderManagement.ordOrderLine.domain;

import com.slz3.business.frame.enums.AuditFlag;
import com.slz3.business.frame.enums.UsingFlag;
import com.slz3.business.frame.functions.Add;
import com.slz3.business.frame.functions.Modify;
import com.slz3.business.frame.module.DomainEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Type;
import org.hibernate.validator.constraints.Length;

import javax.persistence.*;

import java.time.LocalDateTime;
import java.util.UUID;

import static javax.persistence.EnumType.STRING;

@MappedSuperclass
@Data
@EqualsAndHashCode(callSuper = false)
public class OrdOrderLineEntity extends DomainEntity {

    /**
     * 编号
     */
    @Column(length = 80)
//    @NotNull(message = "serNum 必须非空!", groups = {Add.class, Modify.class})
    @Length(min = 1, max = 80, message = "ser2 必须非空并且不超过 80 个字符!", groups = {Add.class, Modify.class})
    private String serNum;

    /**
     * 备注
     */
    @Basic(fetch = FetchType.LAZY)
    @Type(type = "text")
    private String serMemo;

    /**
     * 审核状态
     */
    @Enumerated(STRING)
    //@NotNull(message = "serAudit 必须非空!", groups = {Add.class, Modify.class})
    private AuditFlag serAudit;

    /**
     * 启用状态
     */
    @Enumerated(STRING)
    //@NotNull(message = "serUsing 必须非空!", groups = {Add.class, Modify.class})
    private UsingFlag serUsing;

    /**
     * 标签
     */
    private String serLabels;


    /**
     * 订单 结束时间
     * `tzw_end_time` varchar(255) DEFAULT NULL COMMENT '结束时间',
     */
    private LocalDateTime serEndTime;
    /**
     * 订单关闭时间
     * `tzw_close_time` varchar(255) DEFAULT NULL COMMENT '关闭时间',
     */
    private LocalDateTime serCloaseTime;

    /**
     * 发货时间
     * `tzw_delivery_time` varchar(255) DEFAULT NULL COMMENT '发货时间',
     */
    private LocalDateTime serDeliveryTime;

    /**
     * 支付时间
     * `tzw_payment_time` varchar(255) DEFAULT NULL COMMENT '支付时间',
     */
    private LocalDateTime serPaymentTime;
    //公共属性已经占据 `tzw_order_create_date` varchar(255) DEFAULT NULL COMMENT '创建时间',

    /**
     * 支付方式
     * 1支付宝
     * 2微信
     * 3银联
     * 4积分
     * `tzw_payment_type` int(11) DEFAULT NULL COMMENT '支付方式 1支付宝  2微信  3银联  4积分',
     */
    @Enumerated(STRING)
    private PaymentTypeEnum serPaymentType;

    /**
     * 商品ID
     * `tzw_item_id` bigint(11) DEFAULT NULL COMMENT '商品ID',
     */
    private UUID serItemId;
    //公共属性已经占据 `tzw_order_update_date` varchar(255) DEFAULT NULL COMMENT '修改时间',
    /**
     * 备注
     * `tzw_order_beizhu` text COMMENT '备注',
     */
    private String serOrderBeizhu;

    /**
     * TODO 改成枚举类型
     * 订单状态1待付款2待发货3待收货4已完成5交易关闭
     * `tzw_order_status` int(11) DEFAULT NULL COMMENT '订单状态1待付款2待发货3待收货4已完成5交易关闭',
     */
    private Integer serOrderStatus;

    /**
     * 用户ID
     * `tzw_user_id` bigint(20) DEFAULT NULL COMMENT '用户ID',
     */
    private UUID serUserId;
    //公共属性已经存在`tzw_order_id` bigint(20) NOT NULL AUTO_INCREMENT,

    /**
     * 数量
     * `tzw_order_count` int(11) DEFAULT NULL COMMENT '数量'
     */
    private Integer serOrderCount;

    /**
     * 地址ID
     * `tzw_order_address_id` bigint(11) DEFAULT NULL COMMENT '地址ID',
     */
    private UUID serOrderAddressId;

    /**
     * 收货地址
     * 新加字段
     */
    private String serOrderAddress;

    /**
     * 订单类型
     * 1普通商品
     * 2积分商品
     * 3抽奖商品
     * `tzw_order_type` int(11) DEFAULT NULL COMMENT '订单类型 1普通商品 2积分商品 3抽奖商品',
     */
    @Enumerated(STRING)
    private OrderyTypeEnum serOrderType;

    /**
     * 订单金额
     * `tzw_order_price` double(10,2) DEFAULT NULL COMMENT '订单金额',
     */
    private double serOrderPrice;

    /**
     * 订单号
     * `tzw_order_number` varchar(100) DEFAULT NULL COMMENT '订单号',
     */
    private String serOrderNumber;

    /**
     * 订单uuID
     */
    private UUID serOrderId;

    /**
     * 物流单号
     * `tzw_logistics_no` varchar(500) DEFAULT NULL COMMENT '物流单号',
     */
    private String serLogisticsNo;

    /**
     * 交易单号
     * `tzw_order_no` varchar(100) DEFAULT NULL COMMENT '交易单号',
     */
    private String serOrderNo;

    /**
     * 支付id
     * `tzw_pay_id` int(11) DEFAULT NULL COMMENT '支付id',
     */
    private UUID serPayId;
    // 公共属性已经占据了`tzw_order_deleted` int(11) DEFAULT NULL COMMENT '0未删除 1已删除',

}
